In [1]:
from figures import plot_spectrogram
import griffin_lim as gl
from IPython.display import Audio, display, HTML
from librosa import load as load_wav
import matplotlib.pyplot as plt
import numpy as np
import os

def p(s):
    display(HTML('<p>%s</p>' % s))

def ms_to_samples(ms, sample_rate):
    return int(ms / 1000 * sample_rate)

Griffin-Lim¶

In [2]:
def report_griffin_lim(name, wav_path):
    x, sample_rate = load_wav(wav_path)
    S = ms_to_samples(24, sample_rate)
    L = 4 * S
    window = gl.make_modified_hamming_window(S, L)
    stft = gl.get_stft(x, window, S, L, trim=True)
    gl.save_spectrogram_to_png(stft, name)
    
    p('Original audio')
    display(Audio(x, rate=sample_rate))
    
    p('Original spectrogram')
    fig, ax = plt.subplots()
    plot_spectrogram(ax, stft)
    plt.show()
    
    p('Griffin-Lim reconstruction')
    x_gl = gl.lsee_mstftm(np.abs(stft), window, S, L, len(x), trim=True)
    display(Audio(x_gl, rate=sample_rate))
    
    p('Griffin-Lim spectrogram')
    stft_gl = gl.get_stft(x_gl, window, S, L, trim=True)
    fig, ax = plt.subplots()
    plot_spectrogram(ax, stft_gl)
    plt.show()

Guitar note¶

In [3]:
report_griffin_lim('guitar-note', 'guitar-note.wav')

Original audio

Your browser does not support the audio element.

Original spectrogram

Griffin-Lim reconstruction

100%|████████████████████████████████████████████████████████████████████████████████| 20/20 [00:02<00:00,  7.58it/s]
Your browser does not support the audio element.

Griffin-Lim spectrogram

Guitar notes¶

In [4]:
report_griffin_lim('guitar-notes', 'guitar-notes.wav')

Original audio

Your browser does not support the audio element.

Original spectrogram

Griffin-Lim reconstruction

100%|████████████████████████████████████████████████████████████████████████████████| 20/20 [00:01<00:00, 10.35it/s]
Your browser does not support the audio element.

Griffin-Lim spectrogram

Speech¶

In [5]:
report_griffin_lim('speech', 'speech.wav')

Original audio

Your browser does not support the audio element.

Original spectrogram

Griffin-Lim reconstruction

100%|████████████████████████████████████████████████████████████████████████████████| 20/20 [00:15<00:00,  1.27it/s]
Your browser does not support the audio element.

Griffin-Lim spectrogram

Running Griffin-Lim on edited spectrograms¶

In [6]:
def report_edited_spectrograms(name, wav_path):
    x, sample_rate = load_wav(wav_path)
    S = ms_to_samples(24, sample_rate)
    L = 4 * S
    window = gl.make_modified_hamming_window(S, L)
    stft = gl.get_stft(x, window, S, L, trim=True)
    gl.save_spectrogram_to_png(stft, name)
    
    p('Original audio')
    display(Audio(x, rate=sample_rate))
    
    p('Original spectrogram')
    fig, ax = plt.subplots()
    plot_spectrogram(ax, stft)
    plt.show()
    
    dir_path = os.path.join('spectrograms', name)
    for filename in os.listdir(dir_path):
        if 'edited' not in filename:
            continue
        spec = gl.load_spectrogram_from_png(dir_path, filename)
        
        p(f'Edited spectrogram ({filename})')
        fig, ax = plt.subplots()
        plot_spectrogram(ax, np.exp(spec))
        plt.show()
        
        p(f'Griffin-Lim reconstruction ({filename})')
        x_gl = gl.lsee_mstftm(np.exp(spec), window, S, L, len(x), trim=True)
        display(Audio(x_gl, rate=sample_rate))
        
        # p(f'Griffin-Lim spectrogram ({filename})')
        # stft_gl = gl.get_stft(x_gl, window, S, L, trim=True)
        # fig, ax = plt.subplots()
        # plot_spectrogram(ax, stft_gl)
        # plt.show()

Guitar note¶

In [7]:
report_edited_spectrograms('guitar-note', 'guitar-note.wav')

Original audio

Your browser does not support the audio element.

Original spectrogram

Edited spectrogram (spec_edited_more_overtones.png)

Griffin-Lim reconstruction (spec_edited_more_overtones.png)

100%|████████████████████████████████████████████████████████████████████████████████| 20/20 [00:02<00:00,  7.62it/s]
Your browser does not support the audio element.

Edited spectrogram (spec_edited_line.png)

Griffin-Lim reconstruction (spec_edited_line.png)

100%|████████████████████████████████████████████████████████████████████████████████| 20/20 [00:02<00:00,  7.05it/s]
Your browser does not support the audio element.

Guitar notes¶

In [8]:
report_edited_spectrograms('guitar-notes', 'guitar-notes.wav')

Original audio

Your browser does not support the audio element.

Original spectrogram

Edited spectrogram (spec_edited_deleted_overtones.png)

Griffin-Lim reconstruction (spec_edited_deleted_overtones.png)

100%|████████████████████████████████████████████████████████████████████████████████| 20/20 [00:01<00:00, 10.00it/s]
Your browser does not support the audio element.

Edited spectrogram (spec_edited_painted.png)

Griffin-Lim reconstruction (spec_edited_painted.png)

100%|████████████████████████████████████████████████████████████████████████████████| 20/20 [00:01<00:00, 10.19it/s]
Your browser does not support the audio element.

Edited spectrogram (spec_edited_louder_overtones.png)

Griffin-Lim reconstruction (spec_edited_louder_overtones.png)

100%|████████████████████████████████████████████████████████████████████████████████| 20/20 [00:01<00:00, 10.20it/s]
Your browser does not support the audio element.

Speech¶

In [9]:
report_edited_spectrograms('speech', 'speech.wav')

Original audio

Your browser does not support the audio element.

Original spectrogram

Edited spectrogram (spec_edited_accentuated_certain_features.png)

Griffin-Lim reconstruction (spec_edited_accentuated_certain_features.png)

100%|████████████████████████████████████████████████████████████████████████████████| 20/20 [00:16<00:00,  1.24it/s]
Your browser does not support the audio element.

Edited spectrogram (spec_edited_smiley.png)

Griffin-Lim reconstruction (spec_edited_smiley.png)

100%|████████████████████████████████████████████████████████████████████████████████| 20/20 [00:17<00:00,  1.16it/s]
Your browser does not support the audio element.
In [ ]: